package com.itsitio.dbimporter.controller;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import org.springframework.web.servlet.ModelAndView;

import com.itsitio.dbimporter.dto.FileDTO;
import com.itsitio.dbimporter.dto.TablaDTO;
import com.itsitio.dbimporter.helper.DataLoaderManager;
import com.itsitio.dbimporter.modelo.metadata.MetadataEntidad;
import com.itsitio.dbimporter.modelo.referencia.TipoArchivo;
import com.itsitio.dbimporter.servicio.MetadataEntidadSrv;

@Controller
@RequestMapping("/cargarArchivos/*")

public class CargarArchivosController extends BaseController {
	
	
	@Autowired
	MetadataEntidadSrv metadataSrv;
	
	@Autowired
	DataLoaderManager dataLoaderManager;

	/**
	 * TEC alta de usuarios masivo
	 */
	@RequestMapping("/cargarArchivos/viewFileUsuarioMasivo.do")
	public ModelAndView cargarArchivoUsuarioMasivoView(){
		Map<String,Object> map = new HashMap<String, Object>();
		map.put("entidades", metadataSrv.obtenerListaEntidades());
		map.put("fileDTO", new FileDTO());
		return this.forward("/upload/cargaArchivoUsuarioMasivo", map);
	}
	
	/**
	 * TEC
	 * @param dto
	 * @param request
	 * @return
	 * @throws IOException
	 */
	@RequestMapping("/cargarArchivos/viewFileUsuarioMasivoProceso.do")
	public ModelAndView leerArchivoUsuariosMasivo(
			@ModelAttribute("fileDTO")FileDTO dto,HttpServletRequest request) throws IOException{
		
		Map<String,Object> map = new HashMap<String, Object>();
		
		CommonsMultipartFile commonsMultipartFile = dto.getFile();
		
		MetadataEntidad entity = metadataSrv.obtenerEntidadById(dto.getEntidad());

		
//		File file = new File("C:/itemsUsuarios.csv");
		
		File file = new File("/tmp/itemsUsuarios.csv");
		
		try {
			commonsMultipartFile.transferTo(file);
		} catch (IllegalStateException e) {
			e.printStackTrace();
			map.put("mensaje", "error comincarse con administrador: " + e.getMessage());
			return forward("/cargaArchivo/cargaArchivoUsuarioMasivo", map);
		} catch (IOException e) {
			e.printStackTrace();
			map.put("mensaje", "error comincarse con administrador: " + e.getMessage());
			return forward("/cargaArchivo/cargaArchivoUsuarioMasivo", map);
		} finally {
			
		}
		
		
		TablaDTO datosValidados= dataLoaderManager.validarDatosArchivo(entity, TipoArchivo.CSV, file);
		
//		dataLoaderManager.cargarDatosEnBD(entity, TipoArchivo.CSV, file);
		
		/* codigo, mes, pais, codfab, cantidad */
//		insertSrv.ejecutarInsert(entity.getInsertSQL(), new Object[]{2, "diciembre", "Argentina", "ersysyah", 8});
/*		CSVReader reader = new CSVReader(new FileReader(file),';');
		List<String[]> lineas = reader.readAll();
		
					//lineaArray : [categoria;subcategoria;conocimiento;IS;valor(1-5)]
		for (String[] lineaArray : lineas) {
			
			
			Usuario user = new Usuario(lineaArray[1]);//mail
			user.setContrasena("stk");
			user.setCodigoIS(lineaArray[0]);//IS
			
			if(usuarioSrv.obternerPorMail(lineaArray[1]) == null){
				
				
				user.setActivo(true);
				
				DatosPersona datos = new DatosPersona();
				datos.setNombre(lineaArray[3]);//nombre
				datos.setApellido(lineaArray[2]);//apellido
				datos.setPasaporteEEUU(false);
				datos.setPasaporteVigente(false);
				datos.setPasaporteVigenteEU(false);
				datos.setPasaporteVisaEU(false);
				
				
				user.setDatosPersonales(datos);
				
//				List<Conocimiento> con = conocimientoSrv.obtenerTodos();
//				
//				List<Experiencia> explst = new ArrayList<Experiencia>();
//				
//				for(Conocimiento au : con){
//					Experiencia exp = new Experiencia(au, 1);
//					explst.add(exp);
//				}
				
//				user.setExperiencias(explst);
				usuarioSrv.saveUsuario(user);
			}

		}
		
		reader.close();
		file.delete();*/
		request.getSession().setAttribute("datosValidados", datosValidados);
//		map.put("datosValidados", datosValidados);
		map.put("mensaje", "Se importo correctamente el archivo");
		map.put("entity", dto.getEntidad());
		return forward("/upload/verDatosValidados", map);
	}
	
	
	/**
	 * @param entityId
	 * @param request
	 * @return
	 */
	@RequestMapping("/cargarArchivos/insertarDatos.do")
	public ModelAndView insertarDatos(@RequestParam("entity")Long entityId,HttpServletRequest request){
		Map<String,Object> map = new HashMap<String, Object>();
		
		MetadataEntidad entity = metadataSrv.obtenerEntidadById(entityId);
		
		TablaDTO datosValidados = (TablaDTO) request.getSession().getAttribute("datosValidados");
		
		datosValidados = dataLoaderManager.insertarDatosArchivo(entity, datosValidados);
		
		map.put("datosInsertados", datosValidados);
		
		return this.forward("/upload/verDatosInsertados", map);
	}
	
	
	
	
}
